from abc import ABC, abstractmethod
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from axiom_boot.di.application import AxiomApplication


class ApplicationProcessor(ABC):
    """
    应用生命周期处理器接口。

    这是一个SPI（服务提供者接口），允许框架和用户代码挂接到应用启动的不同阶段。
    所有实现了此接口的类，如果被 `@service` 标记，都将在应用启动时被自动发现和执行。
    这提供了一种高度解耦且可扩展的方式来添加自定义的启动逻辑，例如注册中间件、
    设置事件监听器、或初始化自定义组件。
    """

    @abstractmethod
    async def process(self, app: "AxiomApplication"):
        """
        在应用上下文刷新之后，但在服务器开始接收请求之前执行。

        此方法提供了对 `AxiomApplication` 实例的完全访问权限，允许处理器
        对其进行各种配置和修改，最常见的是操作其内部的 `fastapi_app` 实例。

        Args:
            app: AxiomApplication 的实例，即主应用对象。
        """
        pass 